This specification relates to data transmission.
Data transmission is used to communicate between two or more computers connected to a network. One example use of data delivery is in the field of web site analytics. A publisher is an entity that owns and/or manages a web site. Using analytical services offered by third parties, the publisher can monitor analytical data related to user visits and links to the web site. Example analytical data includes data related to domains and/or web sites from which visitors arrived and to which the visitors departed; traffic patterns, e.g., navigation clicks of visitors within the publisher's web site; visitor actions, e.g., purchases, filling out of forms, etc., and other actions that a visitor may take in relation to the publisher's web site. The analysis of such analytical data can inform the publisher of how the visitors were referred to the publisher's web site, whether an advertising campaign resulted in the referral, and how the visitors interacted with the publisher's web site. With this understanding, the publisher can implement changes to increase revenue generation and/or improve the visitor experience. For example, a publisher can focus marketing resources on advertising campaigns, review referrals from other web sites, identify other publishers as potential partners for cross-linking, and so on.
One example analytical system that provides analytical tools that facilitate the collection and analysis of such analytical data is provided by Google™Analytics, available from Google, Inc., in Mountain View, Calif. To use such systems, a publisher typically provides tracking instructions embedded in its web pages (or, alternatively, provides code in its web page that requests the tracking instructions from an analytics server). Typically, the tracking instructions is a snippet of JavaScript™code that the publisher adds onto every page of their web site for which traffic is to be tracked. When the page is rendered by a user device, the tracking instructions is executed, collects visitor data and sends it back to the analytics server in the form of a tracking data communication for processing. One common method of sending the tracking data communication is to send it as part of an HTTP request.
The collection of tracking data is also referred to as a tracking beacon. Example tracking data includes account identifier that identifies an analytics account of the publisher, a visitor identifier that identifies the visitor, and event statistics, such as whether the visitor has been to the web site before, the timestamp of the current visit, etc.
The amount and types of events that are reported in the tracking data can be specified by the publisher, e.g., to account for particular information that a publisher wishes to track. However, there is an upper limit on the size of the tracking data communication, as the HTTP GET request has a limit as to the amount of information that can be sent. One way to be able to send greater amounts of tracking data than can be sent by an HTTP GET is to utilize an HTTP POST.
An HTTP POST can be sent either as part of an html form or as part of an asynchronous JavaScript (AJAX) request. An HTTP POST sent as part of an html form adds an entry to the history of some browsers. This may potentially degrade the user experience, as the added entry to the history will cause the backwards button in a browser to produce unexpected results in response to a user's click.
Sending the tracking data as part of an HTTP POST using AJAX is subject to same origin policies of browsers. Many web browsers have protections built into them that prevent a web page or application running originating from one domain from accessing methods and properties from another domain. Because the web page that is being tracked originates from a publisher domain that is different from the domain of the analytics server, the JavaScript running on the web page of the publisher domain may not be able to send the HTTP POST to the analytics server.
Finally, cross origin resource sharing (CORS) does allow for the sending of AJAX post request across a domain boundary. However, many browsers do not support cross origin resource sharing.